package com.resou.reader.api.service;

import com.resou.reader.api.entry.BaseComment;
import com.resou.reader.api.entry.BookContentBean;
import com.resou.reader.api.entry.BookContentData;
import com.resou.reader.api.entry.BookDetailBean;
import com.resou.reader.api.entry.ChapterDataBean;
import com.resou.reader.api.entry.ChapterItemBean;
import com.resou.reader.api.entry.CommentBean;
import com.resou.reader.api.entry.CommonData;
import com.resou.reader.api.entry.FreezoneBean;
import com.resou.reader.api.entry.Result;
import com.resou.reader.api.entry.ResultList;
import com.resou.reader.api.entry.ShareTimeBean;
import com.resou.reader.api.entry.TypeBean;
import com.resou.reader.bookshelf.readhistory.datasupport.BookCollection;

import java.util.List;

import io.reactivex.Observable;
import retrofit2.Call;
import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.GET;
import retrofit2.http.Header;
import retrofit2.http.POST;
import retrofit2.http.Query;

public interface BookService {

    /**
     * 获取书本详情
     */
    @POST("book/view")
    Observable<Result<CommonData<BookDetailBean>>> getBookDetail(@Header("token") String token, @Query("bookId") String bookId, @Query("device") String device, @Query("novelChannel") String novelChannel);

    // 书架 start

    // search start

//    /**
//     * 搜索接口
//     */
//    @FormUrlEncoded
//    @POST("/search/query?/")
//    Observable<Result<CommonData<List<BookSearchBean>>>> search(@Query("text") String text);
//
//    /**
//     * 大家都在搜
//     */
//    @FormUrlEncoded
//    @POST("/search/seachPush?/")
//    Observable<Result<CommonData<List<String>>>> searchByAll();
//
//    /**
//     * 最近搜索记录
//     */
//    @FormUrlEncoded
//    @POST("/search/queryHot?/")
//    Observable<Result<CommonData<List<String>>>> searchRecord(@Field("clientVersion") String clientVersion);
//
//    /**
//     * 保存搜索记录,text多个用逗号隔开
//     */
//    @FormUrlEncoded
//    @POST("/hotKeySave?/")
//    Observable<Result> saveSearchRecord(@Field("clientVersion") String clientVersion, @Field("text") String text, @Field("token") String token);


    // reader start

    /**
     * 图书章节信息
     *
     * @param bookId
     * @param channel 否
     * @param token   否
     * @param device  否
     * @return
     */
    @FormUrlEncoded
    @POST("book/catalogList")
    Observable<CommonData<ChapterDataBean<List<ChapterItemBean>>>> getBookCatalogList(@Field("bookId") String bookId, @Field("channel") String channel, @Field("token") String token, @Field("device") String device);

    /**
     * 图书内容信息
     * 使用新接口 @see {@link #(String, String, String)}
     */
    @Deprecated
    @FormUrlEncoded
    @POST("book/content")
    Observable<Result<BookContentData>> getBookContent(@Field("token") String token, @Field("bookId") String bookId, @Field("chapterId") String chapterId);

//    /**
//     * 获取图书内容
//     *
//     * @param token     登录返回的token
//     * @param bookId    书唯一标识
//     * @param chapterId 章节id
//     * @return 书内容Bean
//     */
//    @FormUrlEncoded
//    @POST("book/reading")
//    Observable<Result<BookContentBean>> getBookContentV2(@Header("token") String token, @Field("bookId") String bookId, @Field("chapterId") String chapterId, @Field("defaultReadPath") int defaultReadPath);

    /**
     * 获取图书内容
     *
     * @param token     登录返回的token
     * @param bookId    书唯一标识
     * @param chapterId 章节id
     * @return 书内容Bean
     */
    @FormUrlEncoded
    @POST("book/readingApi")
    Observable<Result<BookContentBean>> getBookContentV2(@Header("token") String token, @Field("bookId") String bookId, @Field("chapterId") String chapterId, @Field("defaultReadPath") int defaultReadPath);

    @FormUrlEncoded
    @POST("book/reading")
    Call<Result<BookContentBean>> getBookContentV2Call(@Header("token") String token, @Field("bookId") String bookId, @Field("chapterId") String chapterId);

    /**
     * 获取书评详情接口
     *
     * @param page     否 页码默认0
     * @param pageSize 否 每页多少数据，默认10
     * @param type     评论类型1，最新 2，热门
     * @param novelId  是 书籍id
     * @return 已调通
     */
    @FormUrlEncoded
    @POST("comment/getBookComment")
    Observable<BaseComment> reviewComment(@Field("bookId") String novelId,
                                          @Field("type") String type,
                                          @Field("page") int page,
                                          @Field("pageSize") int pageSize);

    /**
     * 获取评论详情接口
     *
     * @param page     否 页码默认0
     * @param pageSize 否 每页多少数据，默认10
     * @return 已调通
     */
    @POST("comment/getBookCommentView")
    Observable<Result<CommentBean>> reviewCommentView(@Query("id") String id,
                                                      @Query("page") int page,
                                                      @Query("pageSize") int pageSize);

    /**
     * 添加评论
     *
     * @param token               是
     * @param content             是 评论内容
     * @param novelId             是 bookId
     * @param bookReviewCommentId 否，如果是评论的评论需要传该字段
     * @return
     */
    @POST("book/addReviewComment")
    Observable<Result<CommentBean>> addComment(@Query("token") String token,
                                               @Query("content") String content,
                                               @Query("novelId") String novelId,
                                               @Query("bookReviewCommentId") String bookReviewCommentId,
                                               @Query("level") int level);

    /**
     * @param token     是
     * @param status    是  点赞状态
     * @param commentId 是 评论id
     * @return
     */
    @FormUrlEncoded
    @POST("book/likeComment")
    Observable<Result> likeComment(@Field("token") String token,
                                   @Field("status") int status,
                                   @Field("commentId") int commentId);

    /**
     * 评论点赞
     *
     * @param token     是
     * @param commentId 是 评论id
     * @return
     */
    @FormUrlEncoded
    @POST("comment/setPraisenum")
    Observable<Result> likeComment(@Field("token") String token,
                                   @Field("id") int commentId);

    /**
     * 删除评论
     *
     * @param id 是
     * @return
     */
    @POST("comment/delBookComment")
    Observable<Result> deleteComment(@Query("token") String token, @Query("id") String id);

    /**
     * 举报评论接口
     *
     * @param token  是  类型
     * @param type   类型  是 1-催更 辱骂作者及他人 2-广告及垃圾信息 3-色情 污秽内容 4-激进时政 敏感信息
     * @param beId   是 被举报的id
     * @param beType 是 被举报的id类型：1-书籍id 4-短评id 5-短评的回复的id
     * @return
     */
    @FormUrlEncoded
    @POST("book/report")
    Observable<Result> report(@Field("token") String token, @Field("type") int type,
                              @Field("beId") String beId,
                              @Field("beType") String beType);


    /**
     * 图书榜单获取typelist
     *
     * @return
     */
    @FormUrlEncoded
    @POST("recommend/recommendList")
    Observable<ResultList<TypeBean>> typeList(@Field("bookId") String bookId);

    /**
     * 验证是否自动购买
     *
     * @return
     */
    @FormUrlEncoded
    @POST("book/checkAutoBuy")
    Observable<Result<Boolean>> checkAutoBuy(@Field("token") String token, @Field("bookId") String bookId);

    /**
     * 设置自动购买
     *
     * @return
     */
    @FormUrlEncoded
    @POST("book/setOrAbolishAutoBuy")
    Observable<Result> setAutoBuy(@Field("token") String token, @Field("bookId") String bookId, @Field("autoPerchase") String autoPerchase);

    /**
     * 添加分享时间
     *
     * @return
     */
    @POST("book/share/ad")
    Observable<Result<ShareTimeBean>> addShareTime(@Header("token") String token);


    /**
     * 免费榜单业务接口
     *
     * @param typeId   55 排行榜 56 免费专区；
     * @param gender   1 男  2 女
     * @param page     0   起始页 为0开始
     * @param pagesize 每天显示多少条
     * @return
     */
    @GET("book/freeTypeList")
    Observable<Result<List<FreezoneBean>>> quearFreeZon(@Query("typeId") int typeId, @Query(
            "gender") int gender, @Query("page") int page, @Query("pageSize") int pagesize);

    /**
     * 阅读到完完结页的推荐列表
     *
     * @param bookId 书籍id
     * @return
     */
    @GET("recommend/recommendBookList")
    Observable<Result<List<BookDetailBean>>> quearRecommendBookList(@Query("bookId") String bookId);


    /**
     * 获取书详
     *
     * @param bookId 书籍id
     * @return
     */
    @GET("user/readrecord/queryUserReadRecordDetail")
    Observable<Result<BookDetailBean>> quearBookRecordDetail(@Query("token") String token, @Query("bookId") String bookId);


    /**
     * 获取自动购买列表
     *
     * @param token
     * @param page     页码
     * @param pageSize 页数
     * @return
     */
    @POST("book/autoBuyList")
    Observable<Result<List<BookDetailBean>>> quearAutoPayList(@Query("token") String token, @Query("page") int page, @Query("pageSize") int pageSize);

    /**
     * 取消自动购买
     *
     * @param token
     * @param bookIds 书籍id
     * @return
     */
    @POST("book/closeAutoBuyBooks")
    Observable<Result<String>> cancellAutoPay(@Query("token") String token, @Query("bookIds") String bookIds);

    /**
     * 查询书籍是否加入书架
     *
     * @param token
     * @param bookId 书籍id
     * @return
     */
    @POST("book/checkUnshelf")
    Observable<Result<BookDetailBean>> checkUnshelf(@Query("token") String token, @Query("bookId") String bookId);


}
